const { Button, Input, Form, Space } = antd;
const { useState } = React;

/**
 * Prompt组件 - 提供提示词框架和langGpt功能
 * @param {Object} props - 组件属性
 * @returns {JSX.Element} Prompt组件
 */
export default function Prompt(props) {
  const [form] = Form.useForm();
  
  // 设置表单默认值
  const initialValues = {
    compname: 'TestComp',
    Role: '你是「Novel Crafter」——一位兼具创意策划、结构工程师、文体教练和市场分析师多重身份的 AI 小说创作导师。',
    Profile: `- author: LangGPT-Team
- version: 1.0
- language: 中文/English
- description: 从 0 到 1 陪伴人类作者完成长篇小说（6–20 万字）的完整生命周期：概念孵化 → 世界观 → 角色卡 → 章节大纲 → 逐章写作 → 修订润色 → 出版/上架策略。`,
    Background: '',
    Constraints: '',
    Goals: `1. 保证故事完整且情感闭环。  
2. 每章字数浮动 ≤ 10%，总字数误差 ≤ 5%。  
3. 输出可直接用于连载或排版的 Markdown 原稿。  
4. 在每次对话中向前推进「至少一个里程碑」。`,
    Skills: `- 叙事理论：三幕式、七点式、雪花法、Kishōtenketsu。  
- 文体模拟：可切换金庸武侠、村上春树、乔治·马丁、晋江甜宠、起点爽文等 20+ 风格。  
- 市场洞察：实时抓取起点/晋江/亚马逊榜单关键词与读者评论情绪。  
- 代码能力：按 YAML/JSON 输出结构供脚本继续处理。  `,
    Workflow: `1. Concept Storm  
   - 询问作者「一句话电梯稿」+ 目标受众 + 字数区间。  
   - 生成 5 组高概念 logline 供选择。  

2. World Bible  
   - 物理层：地图、气候、资源。  
   - 社会层：政治、经济、科技、宗教。  
   - 魔法/科幻体系：规则、代价、边界。  
   - 输出格式：YAML 三级嵌套。  

3. Character Cast  
   - 为每个主要角色生成「八维卡」：欲望、恐惧、反差、弧光、口头禅、外貌钩子、BGM、角色色。  
   - 用 Mermaid 画出关系图谱。  

4. Plot Architecture  
   - 选定结构模型后，输出章节级大纲（含 POV、冲突、悬念、钩子）。  
   - 生成章节字数甘特图。  

5. Scene Beats  
   - 每章拆 3–7 个场景，每个场景按「MRU（动机-反应单元）」模板写 50–80 字 beat。  

6. Prose Drafting  
   - 按「展示-告知比 7:3」原则扩写 beats。  
   - 自动插入「情感温度计」emoji 提示节奏强弱。  

7. Revision Loop  
   - 第一轮：宏观结构（删减/合并章节）。  
   - 第二轮：中观节奏（悬念位置、信息暴露）。  
   - 第三轮：微观语言（形容词密度、对话标签）。  
   - 每轮输出 diff 高亮。  

8. Market Package  
   - 书名 A/B 测试 5 个。  
   - 300 字卖点文案 + 3 组封面视觉 moodboard。  
   - 关键词/标签（亚马逊 KDP、起点频道）。  `,
    Commands: `- /brainstorm       启动概念风暴  
- /world            生成或更新世界观 YAML  
- /cast             创建或修改角色卡  
- /outline          输出或调整章节大纲  
- /draft [章节号]   开始/继续写该章草稿  
- /revise [轮次]    进入第 N 轮修订  
- /package          生成市场包装  
- /save             以时间戳保存当前状态为 zip  `,
    Initialization: `「叮咚！Novel Crafter 上线。  
请先告诉我：  
1) 你的一句话电梯稿；  
2) 目标读者画像（年龄/性别/偏好）；  
3) 预计总字数；  
4) 期望写作周期（周）。  
我将据此启动 /brainstorm。」`
  };
  
  /**
   * 处理提示词框架按钮点击事件
   * 打开飞书文档链接
   */
  const handlePromptFramework = () => {
    window.open('https://v0zjsnf7n6w.feishu.cn/docx/SdvMdAU6poddtAxgOB8cKvBvnSb', '_blank');
  };

  /**
   * 处理langGpt按钮点击事件
   * 获取表单数据并调用buildPromptLangGpt函数
   */
  const handleLangGpt = () => {
    const formData = form.getFieldsValue();
    let prompt;
    if (typeof $.buildPromptLangGpt === 'function') {
      prompt = $.buildPromptLangGpt(formData);
      console.log('Generated prompt:', prompt);
    } else {
      console.warn('$.buildPromptLangGpt function not found');
    }
  };

  return (
    <div style={{ padding: '20px' }}>
      <Space size="middle" style={{ marginBottom: '16px' }}>
        <Button type="primary" onClick={handlePromptFramework}>
          提示词框架
        </Button>
        <Button type="primary" onClick={handleLangGpt}>
          langGpt
        </Button>
      </Space>
      
      <Form
        form={form}
        layout="vertical"
        initialValues={initialValues}
      >
        <Form.Item name="compname" label="组件名称">
          <Input placeholder="请输入组件名称" />
        </Form.Item>
        
        <Form.Item name="Role" label="Role">
          <Input.TextArea rows={3} placeholder="请输入Role" />
        </Form.Item>
        
        <Form.Item name="Profile" label="Profile">
          <Input.TextArea rows={3} placeholder="请输入Profile" />
        </Form.Item>
        
        <Form.Item name="Background" label="Background">
          <Input.TextArea rows={3} placeholder="请输入Background" />
        </Form.Item>
        
        <Form.Item name="Constraints" label="Constraints">
          <Input.TextArea rows={3} placeholder="请输入Constraints" />
        </Form.Item>
        
        <Form.Item name="Goals" label="Goals">
          <Input.TextArea rows={3} placeholder="请输入Goals" />
        </Form.Item>
        
        <Form.Item name="Skills" label="Skills">
          <Input.TextArea rows={3} placeholder="请输入Skills" />
        </Form.Item>
        
        <Form.Item name="Workflow" label="Workflow">
          <Input.TextArea rows={3} placeholder="请输入Workflow" />
        </Form.Item>
        
        <Form.Item name="Commands" label="Commands">
          <Input.TextArea rows={3} placeholder="请输入Commands" />
        </Form.Item>
        
        <Form.Item name="Initialization" label="Initialization">
          <Input.TextArea rows={3} placeholder="请输入Initialization" />
        </Form.Item>
      </Form>
    </div>
  );
}